% 生成示例信号
Fs = 500; % 采样频率
t = 0:1/Fs:1-1/Fs; % 时间向量
signal = sin(2*pi*50*t) + sin(2*pi*100*t); % 信号加噪声

% FIR 滤波器设计
% N = 20; % 滤波器阶数
N = 100;
zerossignal = [signal,zeros(1,N)];
b = fir1(N, 0.2); % 设计低通 FIR 滤波器
filtered_signal = filter(b, 1, zerossignal); % 滤波
figure;
subplot(2,1,1);
plot(t,signal);
subplot(2,1,2);
plot(filtered_signal(N/2+1:end));
% 计算群时延
[H, W] = freqz(b, 1, 512); % 获取频率响应
group_delay = -diff(unwrap(angle(H))) ./ diff(W); % 群时延
delay_samples = round(mean(group_delay(1:100))); % 平均群时延（取整）
disp(delay_samples);
% 相位补偿
compensated_signal = zeros(1, length(filtered_signal));
compensated_signal(1:end-delay_samples) = filtered_signal(delay_samples+1:end);
% figure;plot(compensated_signal);

%%
%unwrap
a_list = zeros(1,1000);
for ii = 1:1000
    a_list(ii) = exp(ii*1i*0.2);
end

figure;plot(unwrap(angle(a_list)));
figure;stem(0:length(b)-1,b);

% 设计FIR滤波器
[b, a] = fir1(30, 0.5, hamming(31));

% 查看相位响应
[H, W] = freqz(b, a, 1024);
phase = angle(H);
plot(W, phase);

%%
Fs = 500; % 采样频率
t = 0:1/Fs:1-1/Fs; % 时间向量
signal = sin(2*pi*50*t) + sin(2*pi*100*t); % 信号加噪声
N = Fs;                                  % 对于FIR滤波器，长度 N = FIR_n+1
x_filter = filter(b,1,[x zeros(1,(N-1)/2)]);    % 对输入序列 x 末端补 (N-1)/2 个 0
x_filter = x_filter((N-1)/2+1:end);             % 去除输出序列中前面的 0